home *** CD-ROM | disk | FTP | other *** search
/ Champak 29 / Volume 29 - JOGO DISK .iso / Games / jungle_adventure.swf / scripts / __Packages / FlyingObject.as < prev    next >
Text File  |  2006-11-29  |  7KB  |  255 lines

  1. class FlyingObject extends SSObject
  2. {
  3.    var classID = SSGlobal.CLSID_MOBILEOBJECT;
  4.    var collisionMask = SSGlobal.CLSID_MAINCHAR;
  5.    var healthValue = -0.2;
  6.    var assetID = "FlyingObject";
  7.    var immobilized = 0;
  8.    var travelSpeed = 400;
  9.    var stage = 0;
  10.    var dirX = 0;
  11.    var dirY = 0;
  12.    var soundOn = false;
  13.    var maxSpeed = 100;
  14.    var pLast = 0;
  15.    var zDir = 0;
  16.    var waitTime = 1;
  17.    var waitSyncTime = 8;
  18.    var waitOffset = 0;
  19.    var offsetX = 0;
  20.    var offsetY = 0;
  21.    var editor_isItem = true;
  22.    var editor_name = "FlyingObject";
  23.    var editor_args_names = ["offsetX","offsetY","waitSyncTime"];
  24.    var editor_args_values = [FlyingObject.prototype.offsetX,FlyingObject.prototype.offsetY,FlyingObject.prototype.waitSyncTime];
  25.    var editor_args_types = ["number","number","number"];
  26.    var editor_args_options = [[-1000,1000,25],[-1000,1000,25],[1,10,0.5]];
  27.    var editor_args_descriptions = ["","",""];
  28.    var editor_args_mode = [0,0,0];
  29.    var editor_args_component = ["NumericStepper","NumericStepper","NumericStepper"];
  30.    function FlyingObject(offsetX, offsetY)
  31.    {
  32.       super();
  33.       if(offsetX != null)
  34.       {
  35.          this.offsetX = offsetX;
  36.       }
  37.       if(offsetY != null)
  38.       {
  39.          this.offsetY = offsetY;
  40.       }
  41.    }
  42.    function onAddToWorld()
  43.    {
  44.       this.originX = this.x;
  45.       this.originY = this.y;
  46.       this.nextDest(this.originX + this.offsetX,this.originY + this.offsetY);
  47.    }
  48.    function onAddToScene()
  49.    {
  50.       this.getUpdates();
  51.       if(this.offsetX || this.offsetY)
  52.       {
  53.          this.update = this.update_motion;
  54.       }
  55.       else
  56.       {
  57.          delete this.update;
  58.       }
  59.       if(this.waitTime)
  60.       {
  61.          this.syncTime();
  62.       }
  63.       this.soundOn = false;
  64.       this.snd = new Sound(this.target);
  65.       this.snd.attachSound("jet");
  66.    }
  67.    function onRemoveDisplay()
  68.    {
  69.       this.soundOn = false;
  70.       this.snd.stop();
  71.       this.snd = null;
  72.    }
  73.    function onRemoveFromScene()
  74.    {
  75.       this.cancelUpdates();
  76.       if(this.immobilized)
  77.       {
  78.          this.immobilized = 0;
  79.          this.moveTo(this.originX,this.originY,0);
  80.          this.stage = 0;
  81.       }
  82.    }
  83.    function update(elapsed)
  84.    {
  85.       if(this.world.time > this.pLast + 0.1)
  86.       {
  87.          this.dropParticle("Smoke",this.x + 30,this.y,this.z,0,100,-10);
  88.       }
  89.       this.adjustSound();
  90.    }
  91.    function adjustSound()
  92.    {
  93.       var _loc2_ = this.world.viewport;
  94.       var _loc4_ = this.target._x - _loc2_.x - _loc2_.halfWidth;
  95.       var _loc5_ = this.target._y - _loc2_.y - _loc2_.halfHeight;
  96.       var _loc3_ = 1 - (_loc4_ * _loc4_ + _loc5_ * _loc5_) / 250000;
  97.       if(_loc3_ > 0)
  98.       {
  99.          if(!this.soundOn)
  100.          {
  101.             this.snd.start(0,1048575);
  102.             this.soundOn = true;
  103.          }
  104.          this.snd.setVolume(Math.floor(_loc3_ * 100));
  105.          this.snd.setPan(Math.round(_loc4_ / 500 * 100));
  106.       }
  107.       else if(this.soundOn)
  108.       {
  109.          this.snd.stop();
  110.          this.soundOn = false;
  111.       }
  112.    }
  113.    function syncTime()
  114.    {
  115.       this.waitTime = this.waitSyncTime - (this.world.time + this.waitOffset) % this.waitSyncTime;
  116.    }
  117.    function nextDest()
  118.    {
  119.       if(this.stage = !this.stage)
  120.       {
  121.          this.destX = this.originX + this.offsetX;
  122.          this.destY = this.originY + this.offsetY;
  123.       }
  124.       else
  125.       {
  126.          this.destX = this.originX;
  127.          this.destY = this.originY;
  128.       }
  129.       var _loc4_ = this.destX - this.x;
  130.       var _loc3_ = this.destY - this.y;
  131.       var _loc2_ = Math.sqrt(_loc4_ * _loc4_ + _loc3_ * _loc3_);
  132.       if(_loc2_ > 0.0001)
  133.       {
  134.          this.dirX = _loc4_ / _loc2_;
  135.          this.dirY = _loc3_ / _loc2_;
  136.       }
  137.       else
  138.       {
  139.          this.dirX = 0;
  140.          this.dirY = 0;
  141.       }
  142.    }
  143.    function update_motion(elapsed)
  144.    {
  145.       if(this.waitTime)
  146.       {
  147.          if((this.waitTime -= elapsed) <= 0)
  148.          {
  149.             this.waitTime = 0;
  150.             this.nextDest();
  151.          }
  152.       }
  153.       else
  154.       {
  155.          var _loc5_ = this.destX - this.x;
  156.          var _loc4_ = this.destY - this.y;
  157.          var _loc3_ = Math.sqrt(_loc5_ * _loc5_ + _loc4_ * _loc4_);
  158.          var _loc2_ = Math.sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y);
  159.          if(_loc2_ < _loc3_)
  160.          {
  161.             if(_loc2_ < this.maxSpeed)
  162.             {
  163.                if((_loc2_ += this.maxSpeed * elapsed) < this.maxSpeed)
  164.                {
  165.                   this.velocity.x = _loc2_ * this.dirX;
  166.                   this.velocity.y = _loc2_ * this.dirY;
  167.                }
  168.                else
  169.                {
  170.                   this.velocity.x = this.maxSpeed * this.dirX;
  171.                   this.velocity.y = this.maxSpeed * this.dirY;
  172.                }
  173.             }
  174.          }
  175.          else if(_loc3_ > 10)
  176.          {
  177.             this.velocity.x = this.dirX * _loc3_;
  178.             this.velocity.y = this.dirY * _loc3_;
  179.          }
  180.          else
  181.          {
  182.             this.syncTime();
  183.          }
  184.          this.moveBy(this.velocity.x * elapsed,this.velocity.y * elapsed,0);
  185.       }
  186.       this.adjustSound();
  187.       if(this.world.time > this.pLast + 0.1)
  188.       {
  189.          this.dropParticle("Smoke",this.x + 30,this.y,this.z,0,100,-10);
  190.       }
  191.    }
  192.    function dropParticle(asset, x, y, z, vx, vy, vz)
  193.    {
  194.       var _loc2_ = new SSParticle(asset,1,new Vector(vx,vy,vz),180);
  195.       _loc2_.x = x;
  196.       _loc2_.y = y;
  197.       _loc2_.z = z;
  198.       this.world.addObject(_loc2_);
  199.       this.pLast = this.world.time;
  200.    }
  201.    function immobilize()
  202.    {
  203.       this.update = this.update_immobile;
  204.       this.velocity.y = 0;
  205.       GameSound.playSound("enemyhit");
  206.       this.zDir = !random(2) ? 150 : -150;
  207.       this.immobilized = 10;
  208.    }
  209.    function update_immobile(elapsed)
  210.    {
  211.       var _loc0_ = null;
  212.       var _loc5_ = this.target._rotation -= 480 * elapsed;
  213.       var _loc2_ = _loc5_ * 0.0174532925199433;
  214.       var _loc6_ = Math.cos(_loc2_);
  215.       var _loc4_ = Math.sin(_loc2_);
  216.       this.velocity.y += SSGlobal.GRAVITY * elapsed * 0.25;
  217.       this.moveBy(0,this.velocity.y * elapsed,this.zDir * elapsed);
  218.       this.snd.setVolume(Math.max((1 - Math.abs(this.z / 300)) * 100,0));
  219.       if(this.z < -300)
  220.       {
  221.          this.removeFromScene();
  222.       }
  223.       if(this.world.time > this.pLast + 0.1)
  224.       {
  225.          this.dropParticle("Smoke",this.x + 30 * _loc6_,this.y + 30 * _loc4_,this.z,0,100,-10);
  226.       }
  227.    }
  228.    function onCollision(obj)
  229.    {
  230.       if(this.immobilized || !this.inScene)
  231.       {
  232.          return undefined;
  233.       }
  234.       if((obj.classID & 4294901760) == SSGlobal.CLSID_MAINCHAR)
  235.       {
  236.          if(obj.classID == SSGlobal.CLSID_VEHICLE || obj.y < this.y - this.radius * 0.25)
  237.          {
  238.             this.immobilize();
  239.             obj.velocity.x *= 1.1;
  240.             obj.velocity.y *= -0.5;
  241.          }
  242.          else
  243.          {
  244.             obj.shiftHealth(this.healthValue,this);
  245.          }
  246.       }
  247.    }
  248.    function editor_onDisplay(target, external)
  249.    {
  250.       target.clear();
  251.       target.lineStyle(0,16776960);
  252.       target.lineTo(this.offsetX,this.offsetY);
  253.    }
  254. }
  255.